#include<bits/stdc++.h>
using namespace std;
#define all(x) (x).begin(),(x).end()
#define rall(x) (x).rbegin(),(x).rend()
const int N = 1e5 + 10;
#define INF 0x3f3f3f3f;
typedef long long int ll;
#define close(); std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);
//----------------------------------------------------------------------------//
int n, k, f[N];
bool st[N] {1}; //把第一个点初始化为用过的
queue<int> q;
void bfs(int u)
{
    q.push(0);//从0开始
    while(!q.empty())
    {
        int cur = q.front();
        int a = (q.front() + 1) % n;
        int b = (q.front() + k) % n;
        q.pop();
        if(!st[a])
        {
            f[a] = f[cur] + 1, st[a] = 1; 
            q.push(a);
        }
        if(!st[b])
        {
            f[b] = f[cur] + 1, st[b] = 1;
            q.push(b);
        }
    }
    int mx = -INF;
    for(int i = 0; i < n; i++) mx = max(mx, f[i]);

    cout << mx << '\n';

}
int main()
{
    close();
    cin >> n >> k;

    bfs(0);

    return 0;
}
//一个按键按一下+1,一个按一下+k,找所有值的最小步数的最大值